<?php
/*
 * Обработчик запускается в контексте метода X2::execHandlers,
 * соответственно ему доступны и объект $this, и блок, для которого
 * вызван обработчик ($block), и массив параметров ($params)
 */
/* обработчик предназначен для импортирования произвольного HTML-кода,
 * как статического, так и динамического, в DOM-дерево.
 * Параметры: @src - обязательный, файл ищется среди обработчиков проекта,
 * затем среди глобальных обработчиков (при установке на один хост это одно и то же),
 * и @charset - кодировка данных (по умолчанию предполагается utf-8)
 * Если файл найден, он include'ится с перехватом вывода и импортируется в DOM
 * Поскольку функция html_doc не понимает пространства имен, приходится
 * проводить рекурсивное копирование дерева в XHTML-пространство с помощью
 * XSLT
 */
//error_reporting(E_ALL);

$charset = (isset($params['charset']))? $params['charset'] : "utf-8";

$fileName = false;

if(isset($params['src'])){
  if (file_exists(X2_PROJECT . "/ext/" . $params['src'])) {
    $fileName = X2_PROJECT . "/ext/" . $params['src'];
  } elseif (file_exists(X2 . "/ext/" . $params['src'])){
    $fileName = X2 . "/ext/" . $params['src'];
  }

  if($fileName !== false){
    ob_start();
    include($fileName);
    $htmlStr = ob_get_clean();

    $htmlDOM = @html_doc('<html><head><meta http-equiv="Content-type" content="text/html; charset='.$charset.'"></head><body>'.$htmlStr.'</body></html>');

    if(is_object($htmlDOM)){
      $xslStr = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml"><xsl:template match="/"><div><xsl:apply-templates select="/html/body/node()"/></div></xsl:template><xsl:template match="*"><xsl:element name="{local-name()}" namespace="http://www.w3.org/1999/xhtml"><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:element></xsl:template><xsl:template match="processing-instruction()"><xsl:copy-of select="."/></xsl:template><xsl:template match="text()[normalize-space() = \'\']"/></xsl:stylesheet>';
      $xsl = domxml_xslt_stylesheet($xslStr);

      $newDOM = $xsl -> process ($htmlDOM);
      $div = $newDOM -> document_element();

      $field = $block -> append_child(
        $this -> tree -> create_element_ns(
          X2_NS,
          "field"
        )
      );
      foreach ($div -> child_nodes() as $node){
        $field -> append_child(
          $node -> clone_node(true)
        );
      }
    }
  }
}
?>